// 思路:在game里面搞实例化函数map,food,snake,
//      分别在map,food,snake.的原型空间里面设置一些属性和效果

class Game{
    constructor(el){
        // 保存地图标签对象 .map
        this.el=document.querySelector(el)

        // 创建map实例化对象,把地图的标签对象传给map使用
        this.map=new Map(this.el)  //let map=new Map()
        // 调用map的创建属性
        this.map.create()

        // 创建食物实例化对象,并把地图的标签对象传递给food使用
        this.food=new Food(this.el)
        // 调用食物的属性
        this.food.create()
        // 调用食物的移动
         this.food.foodmove()


        // 创建snake实例化对象
        this.snake=new Snake(this.el)
        // 调用snake的属性
        this.snake.create()
        
        
        

    }
}

// 设置开始按钮
Game.prototype.start=function(){
   t=setInterval(()=>{
        this.snake.snakemove()  
        // 蛇吃食物(思路:当蛇头坐标长度和食物坐标长度一样时,蛇节旧增加一个
        let snakeX=this.snake.snakeObj[0].x*20
        let snakeY=this.snake.snakeObj[0].y*20
        let foodX=this.food.foodmoveX
        let foodY=this.food.foodmoveY
        let MapX=this.map.width
        let MapY=this.map.height
        // 1.判断蛇头坐标长度和食物坐标长度
        if(snakeX==foodX&&snakeY==foodY){
            let last=this.snake.snakeObj[this.snake.snakeObj.length-1]
            //就把这个蛇节追加到蛇的最后面
            this.snake.snakeObj.push({
                x:last.x,
                y:last.y,
                color:last.color,
                box:null
            })
            // 重新设置蛇的属性
            this.snake.create()
            // 重新设置食物的移动
             this.food.foodmove()
        }
        // 2.判断蛇头坐标长度是否超过了地图
         if( snakeX>MapX||snakeY>MapY){
            //  清除定时器
            clearInterval(t)

         }
        
    },150)

// 根据键盘上下左右键  来动态更改蛇的direction
document.addEventListener('keydown', (e) => {
    // 获取事件对象
    e = e || window.event
    // 获取键盘
    // console.log(e.keyCode) // 38 40 37 39
    switch (e.keyCode) {
        case 38:
            this.snake.direction = 'top'
            break;
        case 40:
            this.snake.direction = 'bottom'
            break;
        case 37:
            this.snake.direction = 'left'
            break;
        case 39:
            this.snake.direction = 'right'
            break;
        default:
            break;
    }
}
)}
// 设置结束按钮
Game.prototype.stop=function(){
    clearInterval(t)
}
    



